package org.dromara.article.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.dromara.article.domain.Article;
import org.dromara.article.domain.vo.ArticleQueryVo;
import org.dromara.article.domain.vo.ArticleVo;
import org.dromara.article.domain.vo.UserDetailQueryVo;
import org.dromara.article.domain.vo.UserDetailVo;

import java.util.Date;
import java.util.List;

public interface ArticleMapper extends BaseMapper<Article> {

    /**
     * 分页查询文章列表
     *
     * @param queryVo
     * @param page
     * @return
     */
    IPage<ArticleVo> selectArticleList(@Param("queryVo") ArticleQueryVo queryVo, @Param("page") IPage<ArticleVo> page);

    /**
     * 查询未领取文章ID
     *
     * @param typeId
     * @return
     */
    List<Long> selectIds(@Param("typeId") Integer typeId, @Param("size") Integer size);

    /**
     * 修改领取状态
     *
     * @param article
     * @return
     */
    int updateCollStatusById(@Param("article") Article article);

    /**
     * 更新发布状态
     *
     * @param publishedStatus
     */
    int updatePublishedStatus(@Param("publishedStatus") int publishedStatus, @Param("id") String id, @Param("publishedTime") Date publishedTime);

    /**
     * 领取文章批量更新
     *
     * @param list
     */
    int claimUpdateBatch(@Param("list") List<Article> list);

    /**
     * 查询总领取数量
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Long selectClaimedCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询总发布数量
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Long selectPublishedCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询总废弃数量
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Long selectDisCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询活跃用户数量
     *
     * @param startTime
     * @param endTime
     * @return
     */
    Long selectActiveUserCount(@Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询用户明细列表数据
     *
     * @param userDetailQueryVo
     * @param page
     * @return
     */
    List<UserDetailVo> selectUserDetailList(@Param("queryVo") UserDetailQueryVo userDetailQueryVo, @Param("page") IPage<UserDetailVo> page);
}
